home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / util / LocaleServiceProviderPool.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  6.9 KB  |  218 lines

  1. package sun.util;
  2.  
  3. import java.security.AccessController;
  4. import java.security.PrivilegedActionException;
  5. import java.util.Arrays;
  6. import java.util.HashSet;
  7. import java.util.LinkedHashSet;
  8. import java.util.List;
  9. import java.util.Locale;
  10. import java.util.Map;
  11. import java.util.Set;
  12. import java.util.concurrent.ConcurrentHashMap;
  13. import java.util.logging.Logger;
  14. import java.util.spi.LocaleServiceProvider;
  15. import sun.util.resources.LocaleData;
  16. import sun.util.resources.OpenListResourceBundle;
  17.  
  18. public final class LocaleServiceProviderPool {
  19.    private static Map<Class, LocaleServiceProviderPool> poolOfPools = new ConcurrentHashMap();
  20.    private Set<LocaleServiceProvider> providers = new LinkedHashSet();
  21.    private Map<Locale, LocaleServiceProvider> providersCache = new ConcurrentHashMap();
  22.    private Set<Locale> availableLocales = null;
  23.    private static List<Locale> availableJRELocales = null;
  24.    private Set<Locale> providerLocales = null;
  25.  
  26.    public static LocaleServiceProviderPool getPool(Class<? extends LocaleServiceProvider> var0) {
  27.       LocaleServiceProviderPool var1 = (LocaleServiceProviderPool)poolOfPools.get(var0);
  28.       if (var1 == null) {
  29.          LocaleServiceProviderPool var2 = new LocaleServiceProviderPool(var0);
  30.          var1 = (LocaleServiceProviderPool)poolOfPools.put(var0, var2);
  31.          if (var1 == null) {
  32.             var1 = var2;
  33.          }
  34.       }
  35.  
  36.       return var1;
  37.    }
  38.  
  39.    private LocaleServiceProviderPool(Class<? extends LocaleServiceProvider> var1) {
  40.       try {
  41.          AccessController.doPrivileged(new 1(this, var1));
  42.       } catch (PrivilegedActionException var3) {
  43.          Logger.getLogger("sun.util.LocaleServiceProviderPool").config(var3.toString());
  44.       }
  45.  
  46.    }
  47.  
  48.    public static Locale[] getAllAvailableLocales() {
  49.       return (Locale[])sun.util.LocaleServiceProviderPool.AllAvailableLocales.allAvailableLocales.clone();
  50.    }
  51.  
  52.    public synchronized Locale[] getAvailableLocales() {
  53.       if (this.availableLocales == null) {
  54.          this.availableLocales = new HashSet(this.getJRELocales());
  55.          if (this.hasProviders()) {
  56.             this.availableLocales.addAll(this.getProviderLocales());
  57.          }
  58.       }
  59.  
  60.       Locale[] var1 = new Locale[this.availableLocales.size()];
  61.       this.availableLocales.toArray(var1);
  62.       return var1;
  63.    }
  64.  
  65.    private synchronized Set<Locale> getProviderLocales() {
  66.       if (this.providerLocales == null) {
  67.          this.providerLocales = new HashSet();
  68.          if (this.hasProviders()) {
  69.             for(LocaleServiceProvider var2 : this.providers) {
  70.                Locale[] var3 = var2.getAvailableLocales();
  71.  
  72.                for(Locale var7 : var3) {
  73.                   this.providerLocales.add(var7);
  74.                }
  75.             }
  76.          }
  77.       }
  78.  
  79.       return this.providerLocales;
  80.    }
  81.  
  82.    public boolean hasProviders() {
  83.       return !this.providers.isEmpty();
  84.    }
  85.  
  86.    private synchronized List<Locale> getJRELocales() {
  87.       if (availableJRELocales == null) {
  88.          availableJRELocales = Arrays.asList(LocaleData.getAvailableLocales());
  89.       }
  90.  
  91.       return availableJRELocales;
  92.    }
  93.  
  94.    private boolean isJRESupported(Locale var1) {
  95.       List var2 = this.getJRELocales();
  96.       return var2.contains(var1);
  97.    }
  98.  
  99.    public <P, S> S getLocalizedObject(LocalizedObjectGetter<P, S> var1, Locale var2, Object... var3) {
  100.       return (S)this.getLocalizedObjectImpl(var1, var2, true, (OpenListResourceBundle)null, (String)null, var3);
  101.    }
  102.  
  103.    public <P, S> S getLocalizedObject(LocalizedObjectGetter<P, S> var1, Locale var2, OpenListResourceBundle var3, String var4, Object... var5) {
  104.       return (S)this.getLocalizedObjectImpl(var1, var2, false, var3, var4, var5);
  105.    }
  106.  
  107.    private <P, S> S getLocalizedObjectImpl(LocalizedObjectGetter<P, S> var1, Locale var2, boolean var3, OpenListResourceBundle var4, String var5, Object... var6) {
  108.       if (this.hasProviders()) {
  109.          Locale var7 = var4 != null ? var4.getLocale() : null;
  110.          Locale var8 = var2;
  111.  
  112.          for(Object var10 = null; (var2 = this.findProviderLocale(var2, var7)) != null; var2 = getParentLocale(var2)) {
  113.             LocaleServiceProvider var9 = this.findProvider(var2);
  114.             if (var9 != null) {
  115.                var10 = var1.getObject(var9, var8, var5, var6);
  116.                if (var10 != null) {
  117.                   return (S)var10;
  118.                }
  119.  
  120.                if (var3) {
  121.                   Logger.getLogger("sun.util.LocaleServiceProviderPool").config("A locale sensitive service provider returned null for a localized objects,  which should not happen.  provider: " + var9 + " locale: " + var8);
  122.                }
  123.             }
  124.          }
  125.  
  126.          for(; var4 != null; var4 = var4.getParent()) {
  127.             var7 = var4.getLocale();
  128.             if (var4.handleGetKeys().contains(var5)) {
  129.                return null;
  130.             }
  131.  
  132.             LocaleServiceProvider var13 = this.findProvider(var7);
  133.             if (var13 != null) {
  134.                Object var15 = var1.getObject(var13, var8, var5, var6);
  135.                if (var15 != null) {
  136.                   return (S)var15;
  137.                }
  138.             }
  139.          }
  140.       }
  141.  
  142.       return null;
  143.    }
  144.  
  145.    private LocaleServiceProvider findProvider(Locale var1) {
  146.       if (!this.hasProviders()) {
  147.          return null;
  148.       } else {
  149.          if (this.providersCache.containsKey(var1)) {
  150.             LocaleServiceProvider var2 = (LocaleServiceProvider)this.providersCache.get(var1);
  151.             if (var2 != sun.util.LocaleServiceProviderPool.NullProvider.access$200()) {
  152.                return var2;
  153.             }
  154.          } else {
  155.             for(LocaleServiceProvider var3 : this.providers) {
  156.                Locale[] var4 = var3.getAvailableLocales();
  157.  
  158.                for(Locale var8 : var4) {
  159.                   if (var1.equals(var8)) {
  160.                      LocaleServiceProvider var9 = (LocaleServiceProvider)this.providersCache.put(var1, var3);
  161.                      return var9 != null ? var9 : var3;
  162.                   }
  163.                }
  164.             }
  165.  
  166.             this.providersCache.put(var1, sun.util.LocaleServiceProviderPool.NullProvider.access$200());
  167.          }
  168.  
  169.          return null;
  170.       }
  171.    }
  172.  
  173.    private Locale findProviderLocale(Locale var1, Locale var2) {
  174.       Set var3 = this.getProviderLocales();
  175.  
  176.       Locale var4;
  177.       for(var4 = var1; var4 != null; var4 = getParentLocale(var4)) {
  178.          if (var2 != null) {
  179.             if (var4.equals(var2)) {
  180.                var4 = null;
  181.                break;
  182.             }
  183.          } else if (this.isJRESupported(var4)) {
  184.             var4 = null;
  185.             break;
  186.          }
  187.  
  188.          if (var3.contains(var4)) {
  189.             break;
  190.          }
  191.       }
  192.  
  193.       return var4;
  194.    }
  195.  
  196.    private static Locale getParentLocale(Locale var0) {
  197.       String var1 = var0.getVariant();
  198.       if (var1 != "") {
  199.          int var2 = var1.lastIndexOf(95);
  200.          return var2 != -1 ? new Locale(var0.getLanguage(), var0.getCountry(), var1.substring(0, var2)) : new Locale(var0.getLanguage(), var0.getCountry());
  201.       } else if (var0.getCountry() != "") {
  202.          return new Locale(var0.getLanguage());
  203.       } else {
  204.          return var0.getLanguage() != "" ? Locale.ROOT : null;
  205.       }
  206.    }
  207.  
  208.    // $FF: synthetic method
  209.    static Set access$000(LocaleServiceProviderPool var0) {
  210.       return var0.providers;
  211.    }
  212.  
  213.    // $FF: synthetic method
  214.    static Set access$100(LocaleServiceProviderPool var0) {
  215.       return var0.getProviderLocales();
  216.    }
  217. }
  218.